package web.reclamos.dao.sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import web.reclamos.beans.Usuario;
import web.reclamos.dao.UsuarioDao;
import web.reclamos.dao.exception.ExceptionReclamos;

public class UsuarioDaoSql implements UsuarioDao{

    public void crear(Usuario entidad) throws ExceptionReclamos {
        //registrando fecha actual
        java.util.Date utilDate = new java.util.Date();
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

        Connection cn = null;
        PreparedStatement pstm = null;
        try{
            cn = ConexionDB.getInstance().getConnection();
            String sql = "insert into usuario (id_nombre, id_cargo, id_departamento, " +
                                               "id_area, id_empresa, id_coorporacion, codigo_usuario, " +
                                               "nombre_usuario, apellido_usuario1, " +
                                                "apellido_usuario2, fecha_creacion, fecha_modificacion) " +
                                                "values (?,?,?,?,?,?,?,?,?,?,?,?)";
            pstm = cn.prepareStatement(sql);
            pstm.setInt(1, entidad.getId_nombre());            
            pstm.setInt(2, entidad.getCargo().getId_cargo());
            pstm.setInt(3, entidad.getDepartamento().getId_departamento());
            pstm.setInt(4, entidad.getArea().getId_area());
            pstm.setInt(5, entidad.getEmpresa().getId_empresa());
            pstm.setInt(6, entidad.getCoorporacion().getId_coorporacion());
            pstm.setString(7, entidad.getCodigo_usuario());
            pstm.setString(8, entidad.getNombre_usuario());
            pstm.setString(9, entidad.getApellido_usuario1());
            pstm.setString(10, entidad.getApellido_usuario2());
            pstm.setDate(11, sqlDate);
            pstm.setDate(12, sqlDate);

            pstm.executeUpdate();
        }catch(SQLException ex){
            System.out.println(ex);
        }catch(Exception ex){
              System.out.println(ex);
        }finally{
            ConexionDB.getInstance().close(pstm);
            ConexionDB.getInstance().close(cn);
        }
    }

    public void modificar(Usuario entidad) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void eliminar(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Usuario traerPorId(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Usuario> traerTodo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<Usuario> traerPorNombre(String nombre) {
        Connection cn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        List<Usuario> usuarios = new ArrayList<Usuario>();
        try{
            cn = ConexionDB.getInstance().getConnection();
            String sql = "select * from usuario where nombre_usuario like ? or codigo_usuario like ?";
            pstm = cn.prepareStatement(sql);
            pstm.setString(1, nombre + "%");
            pstm.setString(2, nombre + "%");
            rs = pstm.executeQuery();
            while(rs.next()){
                usuarios.add(new Usuario(rs.getInt("id_nombre"),
                                         rs.getString("codigo_usuario"),
                                         rs.getString("nombre_usuario"),
                                         rs.getString("apellido_usuario1"),
                                         rs.getString("apellido_usuario2")
                             ));
            }
        }catch(SQLException ex){
            System.out.println(ex);
        }catch(Exception ex){
              System.out.println(ex);
        }finally{
            ConexionDB.getInstance().close(rs);
            ConexionDB.getInstance().close(pstm);
            ConexionDB.getInstance().close(cn);
        }
        return usuarios;
    }

}
